RegisterPropertyEditor
Otázka od: Petr Kuklik
7. 9. 2004 14:24
Dobry den,
mam db-komponentu, kde vedle property DataSource a DataField pouzivam jeste
DataFieldObsah. Chtel bych teto property zajistit stejne chovani v
ObjectInspectoru jako ma DataField. Nevite jak toho docilit? Je
RegisterPropertyEditor spravna funkce? A pokud ano, cim mam vyplnit jeji
parametry?
Diky Petr Kuklik
Odpovedá: Vaclav Krmela
7. 9. 2004 15:20
> From: Petr Kuklik
>
> mam db-komponentu, kde vedle property DataSource a DataField pouzivam
> jeste DataFieldObsah. Chtel bych teto property zajistit stejne chovani
v
> ObjectInspectoru jako ma DataField. Nevite jak toho docilit? Je
> RegisterPropertyEditor spravna funkce? A pokud ano, cim mam vyplnit
jeji
> parametry?
Zkus to takto:
{ TKeyField }
type
TDataFieldObsah = class(TStringProperty)
public
procedure GetValues(Proc: TGetStrProc); override;
function GetAttributes: TPropertyAttributes; override;
end;
procedure TDataFieldObsah.GetValues(Proc: TGetStrProc);
var I: Integer;
begin
with GetComponent(0) as TDb-komponenta do
if Assigned(DataSource) then
if Assigned(DataSource.DataSet) then
for I := 0 to DataSource.DataSet.FieldCount - 1 do
Proc(DataSource.DataSet.Fields[i].FieldName);
end;
function TDataFieldObsah.GetAttributes: TPropertyAttributes;
begin
Result := [paValueList, paSortList];
end;
{ Register }
procedure Register;
begin
RegisterPropertyEditor(TypeInfo(string), TDb-komponenta,
'DataFieldObsah', TDataFieldObsah);
end;
Vaclav Krmela
Odpovedá: Ondrej Kelle
7. 9. 2004 16:28
> Dobry den,
> mam db-komponentu, kde vedle property DataSource a
> DataField pouzivam jeste DataFieldObsah. Chtel bych teto
> property zajistit stejne chovani v ObjectInspectoru jako ma
> DataField. Nevite jak toho docilit? Je RegisterPropertyEditor
> spravna funkce? A pokud ano, cim mam vyplnit jeji parametry?
Ano, RegisterPropertyEditor je presne ono. Je to popisane v helpe, parametre
zavisia od toho, ako chces ten property editor registrovat.
V design package:
uses
DesignIntf, DBReg,
MyDBControl;
procedure Register;
begin
RegisterComponents('Data Controls', [TMyDBControl]);
RegisterPropertyEditor(TypeInfo(string), TMyDBControl, 'DataFieldObsah',
TDataFieldProperty);
end;
a v requires tej package musia byt designide.dcp (tam je DesignIntf) a
dcldb.dcp (tam je DBReg).
To plati pre Delphi 6 a 7. Predtym sa myslim ta unita volala DsgnIntf.
Tento priklad registruje TDataFieldProperty pre konkretnu vlastnost typu
string s nazvom DataFieldObsah pre konkretnu triedu TMyDBControl (a jej
potomkov). Da sa to registrovat aj vseobecnejsie, podrobnosti najdes v
helpe.
HTH
TOndrej
Odpovedá: Petr Kuklik
8. 9. 2004 7:52
>>>> "Ondrej Kelle" <o.kelle@digitalpublishing.de> 7.9.2004 16:54:20 >>>
>> Dobry den,
>> mam db-komponentu, kde vedle property DataSource a
>> DataField pouzivam jeste DataFieldObsah. Chtel bych teto
>> property zajistit stejne chovani v ObjectInspectoru jako ma
>> DataField. Nevite jak toho docilit? Je RegisterPropertyEditor
>> spravna funkce? A pokud ano, cim mam vyplnit jeji parametry?
>Ano, RegisterPropertyEditor je presne ono. Je to popisane v helpe, parametre
>zavisia od toho, ako chces ten property editor registrovat.
>V design package:
>uses
> DesignIntf, DBReg,
> MyDBControl;
>procedure Register;
>begin
> RegisterComponents('Data Controls', [TMyDBControl]);
> RegisterPropertyEditor(TypeInfo(string), TMyDBControl, 'DataFieldObsah',
TDataFieldProperty);
>end;
>a v requires tej package musia byt designide.dcp (tam je DesignIntf) a
>dcldb.dcp (tam je DBReg).
>To plati pre Delphi 6 a 7. Predtym sa myslim ta unita volala DsgnIntf.
Presne tohle potrebuju, podle navodu jsem v balicku vse udelal a skutecne v
designtime to funguje, ALE nejde mi prelozit projekt, ktery s mym balickem
komponent pracuje, Delpham se nedari zkompilovat unitu DesignWindows, protoze
nemuze najit unitu ComponentDesigner. Proc jde balicek prelozit a projekt ne?
Diky Petr
Odpovedá: tondrej@t-online.de
8. 9. 2004 8:25
> Presne tohle potrebuju, podle navodu jsem v balicku vse udelal a
> skutecne v designtime to funguje, ALE nejde mi prelozit projekt,
> ktery s mym balickem komponent pracuje, Delpham se nedari zkompilovat
> unitu DesignWindows, protoze nemuze najit unitu ComponentDesigner.
> Proc jde balicek prelozit a projekt ne?
Design time kod musi byt oddeleny od runtime.
Vytvor si runtime-only package s Tvojou kontrolkou a tu mozes pouzivat v
projektoch. Potom si vytvor designtime-only package s registraciou v
IDE, ktora je zavisla na tej runtime.
Podstatne je, aby ta runtime package nijakym sposobom nepouzivala
designtime veci od Borlandu.
http://bdn.borland.com/article/0,1410,27717,00.html
HTH
TOndrej